In [1]:
import pandas as pd
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import math
import re
import random
#pd.set_option('display.max_columns', None)
pd.options.mode.chained_assignment = None # default='warn'
plt.rcParams.update({'figure.max_open_warning': 0})
C:\Users\theoj\anaconda3\lib\site-packages\pandas\core\computation\expressions.py:20: UserWarning: Pandas requires version '2.7.3' or newer of 'numexpr' (version '2.7.1' currently installed). from pandas.core.computation.check import NUMEXPR_INSTALLED
In [2]:
def sportMap(x):
if 'Athlétisme' in x:
x='Athlétisme'
elif 'Hockey' in x:
x='Hockey'
elif 'hiver' in x:
x='Hiver'
elif 'combat' in x:
x='Combat'
elif 'raquettes' in x:
x='Raquettes'
elif 'équestres' in x:
x='Equestres'
else:
return x
return x
def metierMap(x):
if 'militaire' in x.lower():
x="Militaire"
elif 'cadre' in x.lower():
x="Cadre"
elif 'foyer' in x.lower():
x="Parent au foyer"
elif 'travail' in x.lower():
x="Demandeur d'emploi"
else:
return x
return x
def activitéMap(x):
if 'armée' in x.lower():
x="Défense et Sécurité"
elif 'avocat' in x.lower():
x="Droit"
elif 'f&b' in x.lower():
x="Agroalimentaire"
elif any(c in x.lower() for c in ('business','accounting')) :
x="Finance"
elif 'logistique' in x.lower():
x="Commerce / Distribution"
elif 'humaines' in x.lower():
x="Ressources humaines"
elif 'physique' in x.lower():
x="Physique / Mécanique"
elif 'travail' in x.lower():
x="Chomage"
elif 'lecture' in x.lower():
x="Edition"
elif any(c in x.lower() for c in ('école','lycée')):
x="Education"
else:
return x
return x
def secteurMap(x):
if 'seine' in x.lower():
x="ÃŽle-de-France"
elif 'liban' in x.lower():
x="Liban"
elif 'beyrouth' in x.lower():
x="Liban"
else:
return x
return x
def raisonsMap(dicti):
returnDict = {}
for x in dicti.keys():
if 'pas utile à mon niveau de pratique du sport' in x.lower().strip():
raison="Pas utile à mon niveau de pratique du sport"
elif "pas nécessaire" in x.lower().strip():
raison="Pas utile à mon niveau de pratique du sport"
elif "je trouve difficile de choisir un appareil parmi beaucoup de choix disponibles" in x.lower().strip():
raison="Je trouve difficile de choisir un appareil parmi beaucoup de choix disponibles"
elif "pas de connaissance sur l'existence d'un appareil utile pour mon sport" in x.lower().strip():
raison="Pas de connaissance sur l'existence d'un appareil utile pour mon sport"
elif "mon club sportif ne possède pas ce type d'appareil" in x.lower().strip():
raison="Mon club sportif ne possède pas ce type d'appareil"
elif "connaissance d'un appareil utile mais trop cher" in x.lower().strip():
raison="Connaissance d'un appareil utile mais trop cher"
else:
raison=x
if(raison not in returnDict.keys()):
returnDict[raison] = dicti[x]
else:
returnDict[raison]+= dicti[x]
return returnDict
def raisonsOuiMap(dicti):
returnDict = {}
for x in dicti.keys():
if 'pouvoir suivre mes performances' in x.lower().strip():
raison="Pouvoir suivre mes performances"
elif "pouvoir améliorer mes performances" in x.lower().strip():
raison="Pouvoir améliorer mes performances"
elif "me motiver à pratiquer plus régulièrement mon sport" in x.lower().strip():
raison="Me motiver à pratiquer plus régulièrement mon sport"
elif "pouvoir comparer mes performances avec celles d'autres sportifs (mes amis et des pro)" in x.lower().strip():
raison="Pouvoir comparer mes performances avec celles d'autres sportifs (mes amis et des pro)"
elif "sur conseils de mon médecin pour une rééducation ou suivi médical" in x.lower().strip():
raison="Sur conseils de mon médecin pour une rééducation ou suivi médical"
elif "pouvoir pratiquer mon sport en réduisant les blessures" in x.lower().strip():
raison="Pouvoir pratiquer mon sport en réduisant les blessures"
elif "innovation technologique utilisée par les plus grands sportifs" in x.lower().strip():
raison="Être en possession d'une innovation technologique utilisée par les plus grands sportifs"
else:
raison=x
if(raison not in returnDict.keys()):
returnDict[raison] = dicti[x]
else:
returnDict[raison]+= dicti[x]
return returnDict
def influenceMap(dfAll):
indexes = dfAll.index
dicti = {}
for ind in indexes:
dicti[ind] = dfAll["count"].loc[ind]
returnDict = {}
for x in dicti.keys():
if any(c in x.lower() for c in ('suivi','suivre')):
raison="Pouvoir suivre mes performances"
elif "pouvoir améliorer mes performances" in x.lower().strip():
raison="Pouvoir améliorer mes performances"
else:
raison=x
if(raison not in returnDict.keys()):
returnDict[raison] = dicti[x]
else:
returnDict[raison]+= dicti[x]
return returnDict
In [3]:
url="https://docs.google.com/spreadsheets/d/16cXP4m1XDYwKcRIeeElBl6HpkMul82d4VYYz6XiTwOg/export?format=csv&gid=1905028942"
dfAll = pd.read_csv(url,sep=',')
dfAll.drop(columns=['Horodateur'],inplace=True)
dfAll.dropna(axis=0,inplace=True,how='all')
column_to_move = dfAll.pop("Qui serait votre principale influence à l'utilisation d'un appareil de suivi des performances ?")
dfAll.insert(6, "Qui serait votre principale influence à l'utilisation d'un appareil de suivi des performances ?", column_to_move)
column_to_move = dfAll.pop("Préfèreriez-vous avoir votre propre appareil, ou bien utiliser un appareil présent directement à l'endroit où vous pratiquer votre sport ?")
dfAll.insert(7, "Préfèreriez-vous avoir votre propre appareil, ou bien utiliser un appareil présent directement à l'endroit où vous pratiquer votre sport ?", column_to_move)
column_to_move = dfAll.pop("Est-ce que l'achat d'un appareil reconditionné / d'occasion, et donc moins cher, vous intéresserait ?")
dfAll.insert(8, "Est-ce que l'achat d'un appareil reconditionné / d'occasion, et donc moins cher, vous intéresserait ?", column_to_move)
dfAll["Quel est votre sport principal dans la liste ci-dessous ?"] = dfAll["Quel est votre sport principal dans la liste ci-dessous ?"].map(sportMap)
dfAll["Quelle est votre catégorie socio-professionnelle ?"]=dfAll["Quelle est votre catégorie socio-professionnelle ?"].map(metierMap)
dfAll["Quel est votre secteur d'activité ?"]=dfAll["Quel est votre secteur d'activité ?"].map(activitéMap)
dfAll["Quelle est votre principale région de résidence ?"]=dfAll["Quelle est votre principale région de résidence ?"].map(secteurMap)
dfAll['count']=0
dfAll
Out[3]:
| À quelle fréquence pratiquez-vous une activité sportive ? | Pratiquez-vous un sport en club sportif ? (salle de sport, club de football, cours de boxe, etc) | Pratiquez-vous un sport en compétition ? (tournois sportifs, marathon, championnats, etc) | Lors de la pratique de votre sport, utilisez-vous un appareil de suivi de vos performances ? (montre connectée, capteur sur soi, application mobile, etc) | Si oui quel(s) appareil(s) utilisez-vous ? | Si non pour quelles raisons ? | Qui serait votre principale influence à l'utilisation d'un appareil de suivi des performances ? | Préfèreriez-vous avoir votre propre appareil, ou bien utiliser un appareil présent directement à l'endroit où vous pratiquer votre sport ? | Est-ce que l'achat d'un appareil reconditionné / d'occasion, et donc moins cher, vous intéresserait ? | Quel est votre sport principal dans la liste ci-dessous ? | ... | Seriez-vous plus intéressé par l'achat d'un appareil, ou par sa location ?.6 | Seriez-vous plus intéressé par l'achat d'un appareil, ou par sa location ?.7 | Seriez-vous plus intéressé par l'achat d'un appareil, ou par sa location ?.8 | Seriez-vous plus intéressé par l'achat d'un appareil, ou par sa location ?.9 | Seriez-vous plus intéressé par l'achat d'un appareil, ou par sa location ?.10 | Seriez-vous plus intéressé par l'achat d'un appareil, ou par sa location ?.11 | Seriez-vous plus intéressé par l'achat d'un appareil, ou par sa location ?.12 | Seriez-vous plus intéressé par l'achat d'un appareil, ou par sa location ?.13 | Seriez-vous plus intéressé par l'achat d'un appareil, ou par sa location ?.14 | count | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Régulièrement chaque semaine | Oui | Oui | Non | NaN | Pas de connaissance sur l'existence d'un appar... | Mon entraineur m'en a conseillé un | Mon propre appareil | Peut-être, cela dépend de l'état du produit | Hockey | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0 |
| 1 | Régulièrement chaque semaine | Oui | Non | Non | NaN | Pas de connaissance sur l'existence d'un appar... | Mon entraineur m'en a conseillé un | Mon propre appareil | Peut-être, cela dépend de l'état du produit | Raquettes | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0 |
| 2 | Régulièrement chaque mois | Oui | Oui | Non | NaN | Pas utile à mon niveau de pratique du sport | Des amis l'utilisent | Mon propre appareil | Peut-être, cela dépend de l'état du produit | Football | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0 |
| 3 | Régulièrement chaque semaine | Non | Non | Non | NaN | Pas utile à mon niveau de pratique du sport | Des amis l'utilisent | Mon propre appareil | Oui, s'il fonctionne c'est le principal | Football | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0 |
| 4 | Régulièrement chaque semaine | Oui | Non | Non | NaN | Pas utile à mon niveau de pratique du sport | Des amis l'utilisent | Mon propre appareil | Non, je préfère un produit neuf | Musculation | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 124 | Régulièrement chaque mois | Non | Non | Non | NaN | Connaissance d'un appareil utile mais trop cher | Des amis l'utilisent | Mon propre appareil | Oui, s'il fonctionne c'est le principal | Equestres | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Achat | NaN | 0 |
| 125 | Régulièrement chaque semaine | Oui | Oui | Non | NaN | NaN | Des fédérations sportives professionnelles / c... | Un appareil présent sur place | Oui, s'il fonctionne c'est le principal | Equestres | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Location | NaN | 0 |
| 126 | Régulièrement chaque semaine | Non | Non | Non | NaN | Pas utile à mon niveau de pratique du sport | Des amis l'utilisent | Mon propre appareil | Peut-être, cela dépend de l'état du produit | Musculation | ... | NaN | Achat | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0 |
| 127 | Régulièrement chaque semaine | Oui | Non | Oui | Polar watch | NaN | Une nouvelle experience | Mon propre appareil | Non, je préfère un produit neuf | Natation | ... | NaN | NaN | Achat | NaN | NaN | NaN | NaN | NaN | NaN | 0 |
| 128 | Plutôt rarement | Oui | Non | Oui | Fitbit | NaN | Des amis l'utilisent | Mon propre appareil | Non, je préfère un produit neuf | Natation | ... | NaN | NaN | Achat | NaN | NaN | NaN | NaN | NaN | NaN | 0 |
129 rows × 207 columns
In [4]:
print(f"Il y eu {len(dfAll)} réponses au questionnaire")
Il y eu 129 réponses au questionnaire
Analyses selon les profils¶
In [5]:
def countMultiple(dfCol):
tempDict = {}
for i in range (len(dfCol)):
try:
allCol = dfCol[i].split(',')
for val in allCol:
if(val.strip() in tempDict.keys()):
tempDict[val.strip()] += 1
else:
tempDict[val.strip()] = 1
except:
pass
return tempDict
def getParVal(dictTec):
tempDict = {}
for i in dictTec.keys():
try:
resultat = re.findall(r"(?<=de type\s).*", i)[0][:-1]
if(resultat in tempDict.keys()):
tempDict[resultat] += dictTec[i]
else:
tempDict[resultat] = dictTec[i]
except:
resultat = ""
return tempDict
def getColInd(dfCol,mot):
ind = " "
for i in dfCol.columns:
if(mot in i):
ind=i
break
return ind
In [6]:
figWeight,figHeight = 10,7
tempDf=dfAll.groupby(getColInd(dfAll,'genre')).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(kind='pie',figsize=(figWeight,figHeight),title="Genre des participants",ylabel='Genre',autopct='%1.1f%%',colors= ['royalblue','hotpink','orange'])
Out[6]:
<AxesSubplot:title={'center':'Genre des participants'}, ylabel='Genre'>
In [7]:
tempDf=dfAll.groupby(getColInd(dfAll,"tranche d'âge")).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(kind='pie',figsize=(figWeight,figHeight),title="Age des participants",ylabel='Age',autopct='%1.1f%%')
Out[7]:
<AxesSubplot:title={'center':'Age des participants'}, ylabel='Age'>
In [8]:
tempDf=dfAll.groupby(getColInd(dfAll,'socio-professionnelle')).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(kind='pie',figsize=(figWeight,figHeight),title="Metier des participants",ylabel='Metier',autopct='%1.1f%%')
Out[8]:
<AxesSubplot:title={'center':'Metier des participants'}, ylabel='Metier'>
In [9]:
tempDf=dfAll.groupby(getColInd(dfAll,'secteur')).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(kind='pie',figsize=(figWeight,figHeight),title="Secteur des participants",ylabel='Secteur',autopct='%1.1f%%')
Out[9]:
<AxesSubplot:title={'center':'Secteur des participants'}, ylabel='Secteur'>
In [10]:
tempDf=dfAll.groupby(getColInd(dfAll,'principale région')).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(kind='pie',figsize=(figWeight,figHeight),title="Lieu des participants",ylabel='Lieu',autopct='%1.1f%%')
Out[10]:
<AxesSubplot:title={'center':'Lieu des participants'}, ylabel='Lieu'>
In [11]:
tempDf=dfAll.groupby(dfAll.columns[0]).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(kind='pie',figsize=(figWeight,figHeight),title="Fréquence des sessions de sport",ylabel='Fréquence',autopct='%1.1f%%')
Out[11]:
<AxesSubplot:title={'center':'Fréquence des sessions de sport'}, ylabel='Fréquence'>
In [12]:
tempDf=dfAll.groupby(dfAll.columns[1]).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(kind='pie',figsize=(figWeight,figHeight),title="Pratiquez-vous un sport en club",ylabel='Club',autopct='%1.1f%%')
Out[12]:
<AxesSubplot:title={'center':'Pratiquez-vous un sport en club'}, ylabel='Club'>
In [13]:
tempDf=dfAll.groupby(dfAll.columns[2]).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(kind='pie',figsize=(figWeight,figHeight),title="Pratiquez-vous un sport en competition",ylabel='Competition',autopct='%1.1f%%')
Out[13]:
<AxesSubplot:title={'center':'Pratiquez-vous un sport en competition'}, ylabel='Competition'>
In [14]:
tempDf=dfAll.groupby(dfAll.columns[3]).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(kind='pie',figsize=(figWeight,figHeight),title="Sport avec appareil",ylabel='Appareil',autopct='%1.1f%%')
Out[14]:
<AxesSubplot:title={'center':'Sport avec appareil'}, ylabel='Appareil'>
In [15]:
tempDf=dfAll[dfAll.columns[4]].dropna()
tempDf.sort_values().to_frame()
Out[15]:
| Si oui quel(s) appareil(s) utilisez-vous ? | |
|---|---|
| 72 | Apple Watch |
| 54 | Apple watch |
| 51 | Apple watch |
| 25 | Apple watch |
| 110 | Application |
| 31 | Application mobile |
| 122 | Application mobile |
| 35 | Application sur téléphone |
| 78 | Application téléphone |
| 128 | Fitbit |
| 89 | Garmin |
| 17 | Garmin |
| 88 | Garmin Venu 2 |
| 58 | Montre |
| 94 | Montre |
| 76 | Montre |
| 37 | Montre Garmin |
| 71 | Montre Garmin foreverunner 735 xt |
| 81 | Montre Suunto 9 |
| 101 | Montre connectée |
| 103 | Montre connectée |
| 109 | Montre connectée |
| 70 | Montre connectée |
| 8 | Montre connectée |
| 9 | Montre connectée |
| 104 | Montre connectée |
| 32 | Montre connectée |
| 20 | Montre coros 2 |
| 27 | Montre garmin |
| 80 | Montre sunto |
| 127 | Polar watch |
| 68 | Portable / Runkeeper |
| 55 | Samsung watch |
| 38 | Strava |
| 64 | Strava |
| 82 | Suunto 9, Freeletics, Suunto Zoop Novo |
| 99 | Telephone Apple |
| 87 | Téléphone |
| 34 | Téléphone |
| 46 | Velo d'appartement |
| 49 | X |
| 60 | application tel |
| 59 | aucun car cest mauvais on pe se faire mal par ... |
| 106 | fit |
| 117 | montre connectee |
| 56 | montre connecter |
| 69 | « Santé » sur iPhone pour la distance parcourue |
In [16]:
minValues = 2
tempDf = countMultiple(dfAll[dfAll.columns[5]])
tempDf = raisonsMap(tempDf)
tempDf = pd.DataFrame(data=tempDf.values(),columns=["count"],index=tempDf.keys())
tempDfMin = tempDf[tempDf["count"]<=minValues]
tempDf = tempDf[tempDf["count"]>minValues]
tempDf.sort_values(by='count',ascending=True).head().plot(kind='barh',figsize=(10,7),title="Obstacles",ylabel="Obstacles")
Out[16]:
<AxesSubplot:title={'center':'Obstacles'}, ylabel='Obstacles'>
In [17]:
tempDfMin.sort_values(by='count',ascending=False)
Out[17]:
| count | |
|---|---|
| Je n'aime pas courir avec un téléphone dans la poche | 1 |
| Flemme | 1 |
| c est dangereux | 1 |
| Pour des renseignements | 1 |
| Je n'en vois pas l'intérêt | 1 |
| Étant une ancienne sportive en sport Études- je connais mes limites et l’entraînement adapté pour un résultat bénéfique. | 1 |
| No need | 1 |
In [18]:
minValues = 2
tempDf=dfAll.groupby(getColInd(dfAll,'influence')).count().sort_values(by='count',ascending=False)
tempDf = influenceMap(tempDf)
tempDf = pd.DataFrame(data=tempDf.values(),columns=["count"],index=tempDf.keys())
tempDfMin = tempDf[tempDf["count"]<=minValues]
tempDf = tempDf[tempDf["count"]>minValues]
tempDf["count"].sort_values(ascending=False).plot(kind='pie',figsize=(figWeight,figHeight),title="Influence pour utilisation",ylabel='Influenceur',autopct='%1.1f%%')
#tempDf.iloc[:,1].plot(kind='barh',figsize=(figWeight,figHeight),title="Influence pour utilisation",ylabel='Influenceur')
Out[18]:
<AxesSubplot:title={'center':'Influence pour utilisation'}, ylabel='Influenceur'>
In [19]:
tempDfMin['count'].to_frame()
Out[19]:
| count | |
|---|---|
| Aucun | 1 |
| Si je veux prendre le sport serieusement et comme priorité | 1 |
| curiosité personnelle, stats | 1 |
| Une nouvelle experience | 1 |
| Not accurate | 1 |
| Permet une analyse des entraînements et compétitions | 1 |
| Moi même | 1 |
| Juste la disponibilité de l’app sur mon iphone | 1 |
| suggestion téléphone | 1 |
In [20]:
minValues = 2
raisonsBool = ['Oui','Non']
raisonsBool2 = ['Oui','Non']
for r1 in raisonsBool:
for r2 in raisonsBool2:
tempDf = dfAll[(dfAll['Pratiquez-vous un sport en compétition ? (tournois sportifs, marathon, championnats, etc)']==r1)&(dfAll['Pratiquez-vous un sport en club sportif ? (salle de sport, club de football, cours de boxe, etc)']==r2)]
tempDf=tempDf.groupby(getColInd(dfAll,'influence')).count().sort_values(by='count',ascending=False)
tempDf = influenceMap(tempDf)
tempDf = pd.DataFrame(data=tempDf.values(),columns=["count"],index=tempDf.keys())
tempDfMin = tempDf[tempDf["count"]<=minValues]
tempDf = tempDf[tempDf["count"]>minValues]
tempDf["count"].sort_values(ascending=False).plot(kind='pie',figsize=(figWeight,figHeight),title=f"Influence pour utilisation {r1}/{r2}",ylabel='Influenceur',autopct='%1.1f%%')
plt.show()
#tempDf.iloc[:,1].plot(kind='barh',figsize=(figWeight,figHeight),title="Influence pour utilisation",ylabel='Influenceur')
In [25]:
tempDf=dfAll.groupby(getColInd(dfAll,'votre propre appareil')).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(fontsize=15,kind='pie',figsize=(figWeight,figHeight),title="Possession de l'appareil",ylabel='Possession',autopct='%1.1f%%')
Out[25]:
<AxesSubplot:title={'center':"Possession de l'appareil"}, ylabel='Possession'>
In [26]:
tempDf=dfAll.groupby(getColInd(dfAll,'donc moins cher')).count().sort_values(by='count',ascending=False)
tempDf.iloc[:,1].plot(fontsize=15,kind='pie',figsize=(figWeight,figHeight),title="Appareil reconditionné",ylabel='Possession',autopct='%1.1f%%')
Out[26]:
<AxesSubplot:title={'center':'Appareil reconditionné'}, ylabel='Possession'>
In [27]:
tempDf=dfAll.groupby(dfAll.columns[9]).count().sort_values(by='count',ascending=True)
tempDf.iloc[:,1].plot(kind='barh',figsize=(15,8),title="Sport Principal",ylabel='Sport')
Out[27]:
<AxesSubplot:title={'center':'Sport Principal'}, ylabel='Sport'>
Uniformisation puis séparation selon les sports¶
In [28]:
def renameCol(df):
cols = {}
for i in df.columns:
if('approfondi' in i):
cols[i]='Complexe_Simple'
elif ("N'hesitez-pas à rajouter" in i):
cols[i]='Appareils_Utiles'
elif ("seraient les raisons" in i):
cols[i]='Raisons'
elif ("Prix trop élevé" in i):
cols[i]='Obstacle_Prix'
elif ("Peur de l'inconfort" in i):
cols[i]='Obstacle_Inconfort'
elif ("Peur qu'il soit inutile" in i):
cols[i]='Obstacle_Inutile'
elif ("Peur qu'il soit mal utilisé" in i):
cols[i]='Obstacle_Mauv_Utilisation'
elif ("mauvaise qualité" in i):
cols[i]='Obstacle_Qualite'
elif ("esthétique désagréable" in i):
cols[i]='Obstacle_Visuel'
elif ("abonnement pour utiliser" in i):
cols[i]='Montant_Abonnement'
elif ("dépenser pour vous procurer" in i):
cols[i]='Montant_Achat'
elif ("achat d'un appareil, ou par sa location" in i):
cols[i]='Achat_Loc'
df.rename(columns=cols,inplace=True)
return df
def nanAchat_Loc(x):
choice = ['Achat','Location']
try:
x = float(x)
x = random.choice(choice)
return x
except:
if x==0:
x = random.choice(choice)
return x
else:
return x
In [29]:
sports = {}
for i in range (len(dfAll)):
tempSport = dfAll['Quel est votre sport principal dans la liste ci-dessous ?'].iloc[i]
if(tempSport not in sports):
sports[tempSport] = 1
else:
sports[tempSport]+=1
dictDF ={}
for sport in sports.keys():
dictDF[sport] = dfAll[dfAll['Quel est votre sport principal dans la liste ci-dessous ?']==sport]
dictDF[sport].dropna(axis=1,inplace=True,how='all')
renameCol(dictDF[sport])
if 'Achat_Loc' not in dictDF[sport].columns:
dictDF[sport]['Achat_Loc'] = 0
dictDF[sport]['Achat_Loc'] = dictDF[sport]['Achat_Loc'].map(nanAchat_Loc)
dictDF[sport].sort_index(axis=1, ascending=False,inplace=True)
print(f"Il y a eu {len(dictDF[sport])} réponses pour le sport {sport}")
Il y a eu 1 réponses pour le sport Hockey Il y a eu 9 réponses pour le sport Raquettes Il y a eu 13 réponses pour le sport Football Il y a eu 26 réponses pour le sport Musculation Il y a eu 29 réponses pour le sport Athlétisme Il y a eu 5 réponses pour le sport Hiver Il y a eu 13 réponses pour le sport Natation Il y a eu 6 réponses pour le sport Rugby Il y a eu 2 réponses pour le sport Handball Il y a eu 5 réponses pour le sport Combat Il y a eu 7 réponses pour le sport Cyclisme Il y a eu 3 réponses pour le sport Volleyball Il y a eu 3 réponses pour le sport Basketball Il y a eu 4 réponses pour le sport Golf Il y a eu 3 réponses pour le sport Equestres
In [30]:
tempDict = {}
for i in dictDF['Hiver']['Appareils_Utiles']:
allCol = i.split(',')
for val in allCol:
if(val.strip() in tempDict.keys()):
tempDict[val.strip()] += 1
else:
tempDict[val.strip()] = 1
tempDict
Out[30]:
{'Ski connectés pour des statistiques (de type Rossignol & PIQ)': 3,
'Analyse vidéo des gestes (de type Dartfish)': 3,
"Ski connectés pour suivre l'état du matériel et donc éviter les blessures (de type Black Line Ski)": 2,
'Simulateurs de descente à ski (de type Pro Ski Simulator)': 2}
In [31]:
def countMultipleAppareils(dfCol):
tempDict = {}
for i in dfCol:
try:
allCol = i.split(',')
for val in allCol:
if(val.strip() in tempDict.keys()):
tempDict[val.strip()] += 1
else:
tempDict[val.strip()] = 1
except:
pass
return tempDict
for sport in dictDF.keys():
tempApp = countMultipleAppareils(dictDF[sport]['Appareils_Utiles'])
tempDf = pd.DataFrame(data=tempApp.values(),columns=["count"],index=tempApp.keys())
c =tempDf.sort_values(by='count',ascending=False).head(3)
#print(c)
c["count"].plot(kind='barh',title=sport)
plt.show()
In [32]:
def countMultipleSport(dfCol):
tempDict = {}
for i in dfCol:
try:
allCol = i.split(',')
for val in allCol:
if(val.strip() in tempDict.keys()):
tempDict[val.strip()] += 1
else:
tempDict[val.strip()] = 1
except:
print(i)
pass
return tempDict
for k in dictDF.keys():
dfTest = dictDF[k]
tempDf = countMultipleSport(dfTest[dfTest.columns[4]])
tempDf = raisonsMap(tempDf)
tempDf = pd.DataFrame(data=tempDf.values(),columns=["count"],index=tempDf.keys())
c =tempDf.sort_values(by='count',ascending=False).head(1)
print(k,":",c.index[0],"->",c["count"].iloc[0])
Hockey : Mon entraineur m'en a conseillé un -> 1 Raquettes : Pouvoir améliorer mes performances -> 9 Football : Pouvoir suivre mes performances -> 10 Musculation : Pouvoir améliorer mes performances -> 18 Athlétisme : Pouvoir suivre mes performances -> 26 Hiver : Des amis l'utilisent -> 2 Natation : Pouvoir suivre mes performances -> 6 Rugby : Pouvoir améliorer mes performances -> 3 Handball : Mon entraineur m'en a conseillé un -> 1 Combat : Pouvoir suivre mes performances -> 4 Cyclisme : Me motiver à pratiquer plus régulièrement mon sport -> 4 Volleyball : Sur conseils de mon médecin pour une rééducation ou suivi médical -> 1 Basketball : Des amis l'utilisent -> 1 Golf : Pouvoir améliorer mes performances -> 3 Equestres : Mon médecin m'en a conseillé un -> 1
In [33]:
for k in dictDF.keys():
print('Montant_Abonnement et Achat')
tempDf = dictDF[k].groupby('Montant_Abonnement').count().sort_values(by='count',ascending=False).iloc[:,1:2].head(1).index
print(k,":",tempDf[0])
#print('Montant_Achat')
tempDf = dictDF[k].groupby('Montant_Achat').count().sort_values(by='count',ascending=False).iloc[:,1:2].head(1).index
print(k,":",tempDf[0])
tempDf = dictDF[k].groupby('Complexe_Simple').count().sort_values(by='count',ascending=False).iloc[:,1:2].head(1).index
print(k,":",tempDf[0])
try:
tempDf = dictDF[k].groupby('Achat_Loc').count().sort_values(by='count',ascending=False).iloc[:,1:2].head(1).index
print(k,":",tempDf[0])
except:
print("pas de loc")
tempDf = dictDF[k].groupby("Quelle est votre tranche d'âge ?").count().sort_values(by='count',ascending=False).iloc[:,1:2].head(1).index
print(k,":",tempDf[0])
tempDf = dictDF[k].groupby("Quelle est votre principale région de résidence ?").count().sort_values(by='count',ascending=False).iloc[:,1:2].head(1).index
print(k,":",tempDf[0])
tempDf = dictDF[k].groupby("Quel est votre secteur d'activité ?").count().sort_values(by='count',ascending=False).iloc[:,1:2].head(1).index
print(k,":",tempDf[0])
tempDf = dictDF[k].groupby("Quelle est votre catégorie socio-professionnelle ?").count().sort_values(by='count',ascending=False).iloc[:,1:2].head(1).index
print(k,":",tempDf[0])
Montant_Abonnement et Achat Hockey : 0-4,99 euros Hockey : 0-24 euros Hockey : Complet mais complexe Hockey : Achat Hockey : 15-17 ans Hockey : Île-de-France Hockey : Education Hockey : Etudiant Montant_Abonnement et Achat Raquettes : 0-4,99 euros Raquettes : 50-99 euros Raquettes : Simplifié mais compréhensible Raquettes : Achat Raquettes : 18-24 ans Raquettes : Île-de-France Raquettes : Agroalimentaire Raquettes : Etudiant Montant_Abonnement et Achat Football : 0-4,99 euros Football : 50-99 euros Football : Simplifié mais compréhensible Football : Achat Football : 18-24 ans Football : Île-de-France Football : Finance Football : Etudiant Montant_Abonnement et Achat Musculation : 0-4,99 euros Musculation : 100-299 euros Musculation : Simplifié mais compréhensible Musculation : Achat Musculation : 18-24 ans Musculation : Île-de-France Musculation : Informatique / Télécom Musculation : Etudiant Montant_Abonnement et Achat Athlétisme : 5-9,99 euros Athlétisme : 100-299 euros Athlétisme : Simplifié mais compréhensible Athlétisme : Achat Athlétisme : 18-24 ans Athlétisme : Île-de-France Athlétisme : Santé / Social Athlétisme : Employé Montant_Abonnement et Achat Hiver : 0-4,99 euros Hiver : 100-299 euros Hiver : Complet mais complexe Hiver : Achat Hiver : 18-24 ans Hiver : Île-de-France Hiver : Education Hiver : Enseignant Montant_Abonnement et Achat Natation : 0-4,99 euros Natation : 50-99 euros Natation : Simplifié mais compréhensible Natation : Achat Natation : 45-55 ans Natation : Île-de-France Natation : Communication / Marketing Natation : Employé Montant_Abonnement et Achat Rugby : 0-4,99 euros Rugby : 25-49 euros Rugby : Simplifié mais compréhensible Rugby : Achat Rugby : 18-24 ans Rugby : Île-de-France Rugby : Energie Rugby : Etudiant Montant_Abonnement et Achat Handball : 5-9,99 euros Handball : 25-49 euros Handball : Complet mais complexe Handball : Achat Handball : 18-24 ans Handball : Île-de-France Handball : Défense et Sécurité Handball : Etudiant Montant_Abonnement et Achat Combat : 5-9,99 euros Combat : 25-49 euros Combat : Simplifié mais compréhensible Combat : Achat Combat : 25-34 ans Combat : Île-de-France Combat : Communication / Marketing Combat : Etudiant Montant_Abonnement et Achat Cyclisme : 5-9,99 euros Cyclisme : 100-299 euros Cyclisme : Simplifié mais compréhensible Cyclisme : Achat Cyclisme : 35-44 ans Cyclisme : Bourgogne Franche-Comté Cyclisme : Santé / Social Cyclisme : Cadre Montant_Abonnement et Achat Volleyball : 20 euros et plus Volleyball : 50-99 euros Volleyball : Complet mais complexe Volleyball : Achat Volleyball : 18-24 ans Volleyball : Liban Volleyball : Art Volleyball : Cadre Montant_Abonnement et Achat Basketball : 10-14,99euros Basketball : 50-99 euros Basketball : Complet mais complexe Basketball : Achat Basketball : 25-34 ans Basketball : Liban Basketball : Commerce / Distribution Basketball : Cadre Montant_Abonnement et Achat Golf : 10-14,99euros Golf : 100-299 euros Golf : Complet mais complexe Golf : Achat Golf : 18-24 ans Golf : Bourgogne Franche-Comté Golf : Energie Golf : Cadre Montant_Abonnement et Achat Equestres : 5-9,99 euros Equestres : 0-24 euros Equestres : Complet mais complexe Equestres : Achat Equestres : 15-17 ans Equestres : Île-de-France Equestres : Physique / Mécanique Equestres : Etudiant
In [34]:
tempAllDf = []
for i in dictDF.keys():
tempAllDf.append(dictDF[i])
result = pd.concat(tempAllDf)
result.head()
Out[34]:
| À quelle fréquence pratiquez-vous une activité sportive ? | count | Si non pour quelles raisons ? | Raisons | Qui serait votre principale influence à l'utilisation d'un appareil de suivi des performances ? | Quelle est votre tranche d'âge ? | Quelle est votre principale région de résidence ? | Quelle est votre catégorie socio-professionnelle ? | Quel est votre sport principal dans la liste ci-dessous ? | Quel est votre secteur d'activité ? | ... | Obstacle_Inutile | Obstacle_Inconfort | Montant_Achat | Montant_Abonnement | Lors de la pratique de votre sport, utilisez-vous un appareil de suivi de vos performances ? (montre connectée, capteur sur soi, application mobile, etc) | Est-ce que l'achat d'un appareil reconditionné / d'occasion, et donc moins cher, vous intéresserait ? | Complexe_Simple | Appareils_Utiles | Achat_Loc | Si oui quel(s) appareil(s) utilisez-vous ? | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Régulièrement chaque semaine | 0 | Pas de connaissance sur l'existence d'un appar... | Pouvoir améliorer mes performances, Pouvoir co... | Mon entraineur m'en a conseillé un | 15-17 ans | Île-de-France | Etudiant | Hockey | Education | ... | 2.0 | 2.0 | 0-24 euros | 0-4,99 euros | Non | Peut-être, cela dépend de l'état du produit | Complet mais complexe | Analyse vidéo des gestes (de type Dartfish), B... | Achat | NaN |
| 1 | Régulièrement chaque semaine | 0 | Pas de connaissance sur l'existence d'un appar... | Pouvoir suivre mes performances, Pouvoir améli... | Mon entraineur m'en a conseillé un | 18-24 ans | Île-de-France | Etudiant | Raquettes | Informatique / Télécom | ... | 2.0 | 4.0 | 25-49 euros | 0-4,99 euros | Non | Peut-être, cela dépend de l'état du produit | Complet mais complexe | Analyse vidéo des gestes (de type Dartfish), B... | NaN | NaN |
| 6 | Régulièrement chaque mois | 0 | Pas utile à mon niveau de pratique du sport | Pouvoir améliorer mes performances | Des sportifs professionnels que j'apprécie l'u... | 18-24 ans | Île-de-France | Etudiant | Raquettes | Industrie | ... | 1.0 | 1.0 | 50-99 euros | 0-4,99 euros | Non | Oui, s'il fonctionne c'est le principal | Complet mais complexe | Analyse vidéo des gestes (de type Dartfish), B... | Achat | NaN |
| 27 | Régulièrement chaque semaine | 0 | NaN | Pouvoir suivre mes performances, Pouvoir améli... | Des amis l'utilisent | 18-24 ans | Normandie | Etudiant | Raquettes | Agroalimentaire | ... | 3.0 | 2.0 | 50-99 euros | 0-4,99 euros | Oui | Oui, s'il fonctionne c'est le principal | Simplifié mais compréhensible | Analyse vidéo des gestes (de type Dartfish), A... | Achat | Montre garmin |
| 29 | Occasionnellement | 0 | Connaissance d'un appareil utile mais trop cher | Pouvoir suivre mes performances, Pouvoir améli... | Mon médecin m'en a conseillé un | 18-24 ans | Île-de-France | Etudiant | Raquettes | Communication / Marketing | ... | 3.0 | 2.0 | 50-99 euros | 0-4,99 euros | Non | Oui, s'il fonctionne c'est le principal | Simplifié mais compréhensible | Capteur sur la raquette pour analyser le coup ... | Achat | NaN |
5 rows × 28 columns
In [35]:
tempDf = countMultiple(result['Raisons'])
tempDf = raisonsOuiMap(tempDf)
tempDf = pd.DataFrame(data=tempDf.values(),columns=["count"],index=tempDf.keys())
tempDf.sort_values(by='count',ascending=True).plot(kind='barh',figsize=(10,7),title="Motivations",ylabel="Motivations")
Out[35]:
<AxesSubplot:title={'center':'Motivations'}, ylabel='Motivations'>
In [36]:
dfObs = result[['Obstacle_Qualite','Obstacle_Prix','Obstacle_Mauv_Utilisation','Obstacle_Inutile','Obstacle_Inconfort','Obstacle_Visuel']]
dfObs.mean().sort_values(ascending=True).plot(xlim=[0,5],kind='barh',figsize=(15,8),title="Du plus important au moins important",color='tomato')
Out[36]:
<AxesSubplot:title={'center':'Du plus important au moins important'}>
In [37]:
tempDf = getParVal(countMultiple(result['Appareils_Utiles']))
tempDf = pd.DataFrame(data=tempDf.values(),columns=["count"],index=tempDf.keys())
tempDf.sort_values(by='count',ascending=False).head().plot(kind='barh',figsize=(13,7),title="Appareils Utiles",ylabel="Obstacles")
Out[37]:
<AxesSubplot:title={'center':'Appareils Utiles'}, ylabel='Obstacles'>
In [38]:
tempDf.sort_values(by='count',ascending=False)
Out[38]:
| count | |
|---|---|
| Dartfish | 37 |
| Garmin | 26 |
| MOOV Now | 21 |
| Strava | 17 |
| PhyNord | 17 |
| TechnoSport d’Aix-Marseille | 9 |
| STATSport ou Catapult | 8 |
| Phyling | 7 |
| PhyLift | 7 |
| Zepp | 7 |
| HOVR Phantom | 6 |
| Opta | 5 |
| PhyPlate | 4 |
| Playsight | 4 |
| Speed cell Adidas | 4 |
| Tennis Analytic | 4 |
| M-Tracer Epson | 3 |
| TopGolf | 3 |
| FlyFit | 3 |
| Hykso | 3 |
| VERT | 3 |
| Rossignol & PIQ | 3 |
| Pop de Babolat & Piq | 3 |
| Playermaker CITYPLAY | 3 |
| Black Line Ski | 2 |
| Pro Ski Simulator | 2 |
| GraffGolf | 2 |
| Wilson Smart Basketball | 2 |
| BIOMECAFORCE | 2 |
| CWD iJUMP | 2 |
| Huupe | 2 |
| Corner | 2 |
| StepUp Horse ou Equisense | 2 |
| Prevent Biometrics | 2 |
| Aquanex analysis | 1 |
| HELIOS | 1 |
| Zwift | 1 |
| P2C - Prévention des Commotions Cérébrales | 1 |
| CEEFIT | 1 |
| I-Percut | 1 |
| Guardlab | 1 |
| KiSwim | 1 |
| DataDunk | 1 |
| Kinexon | 1 |
| Handball.ai ou Kinexon | 1 |
| Catapult | 1 |
| Magellan Echo Fit | 1 |
| Motionysis | 1 |
| LifeBeam Helmet | 1 |
| DeepStrike | 1 |
| Shot Tracker | 1 |
In [39]:
dfObs=result.groupby('Montant_Achat').count()#.sort_values(by='Genre',ascending=False)
dfObs['count'].plot(kind="pie",figsize=(figWeight,figHeight),title="Montant Achat",ylabel='Montant',autopct='%1.1f%%')
Out[39]:
<AxesSubplot:title={'center':'Montant Achat'}, ylabel='Montant'>
In [40]:
dfObs=result.groupby('Montant_Abonnement').count()#.sort_values(by='count',ascending=True)
dfObs['count'].plot(kind="pie",figsize=(figWeight,figHeight),title="Montant Abonnement",ylabel='Montant',autopct='%1.1f%%')
Out[40]:
<AxesSubplot:title={'center':'Montant Abonnement'}, ylabel='Montant'>
In [41]:
dfObs=result.groupby('Complexe_Simple').count()#.sort_values(by='count',ascending=False)
dfObs['count'].plot(kind="pie",figsize=(figWeight,figHeight),title="Complexité appareil",ylabel='Complexité',autopct='%1.1f%%')
Out[41]:
<AxesSubplot:title={'center':'Complexité appareil'}, ylabel='Complexité'>
In [42]:
dfObs=result.groupby('Achat_Loc').count()#.sort_values(by='Genre',ascending=False)
dfObs['count'].plot(kind="pie",figsize=(figWeight,figHeight),title="Achat ou Location",ylabel='Achat/Location',autopct='%1.1f%%')
Out[42]:
<AxesSubplot:title={'center':'Achat ou Location'}, ylabel='Achat/Location'>
Analyse par Age¶
In [43]:
#Colonnes à analyser
statNames = ["Montant_Abonnement","Montant_Achat",
"Qui serait votre principale influence à l'utilisation d'un appareil de suivi des performances ?",
"Préfèreriez-vous avoir votre propre appareil, ou bien utiliser un appareil présent directement à l'endroit où vous pratiquer votre sport ?",
"Est-ce que l'achat d'un appareil reconditionné / d'occasion, et donc moins cher, vous intéresserait ?",
"Complexe_Simple","Achat_Loc",
"Quel est votre sport principal dans la liste ci-dessous ?"]
In [44]:
ages = {}
for i in range (len(result)):
tempAge = result["Quelle est votre tranche d'âge ?"].iloc[i]
if(tempAge not in ages):
ages[tempAge] = 1
else:
ages[tempAge]+=1
ageDict ={}
for curAges in ages.keys():
ageDict[curAges] = result[result["Quelle est votre tranche d'âge ?"]==curAges]
ageDict[curAges].dropna(axis=1,inplace=True,how='all')
renameCol(ageDict[curAges])
ageDict[curAges].sort_index(axis=1, ascending=False,inplace=True)
print(f"Il y a eu {len(ageDict[curAges])} réponses pour l'âge {curAges}")
ageDict = dict(sorted(ageDict.items()))
#Graph
for stat in statNames:
for k in ageDict.keys():
ageDict[k].groupby(by=stat).count().plot(kind='pie',y='count',figsize=(5,5),title=f"{stat} pour un(e) {k} -> {len(ageDict[k])} réponses",autopct='%1.1f%%',legend=False)
Il y a eu 9 réponses pour l'âge 15-17 ans Il y a eu 52 réponses pour l'âge 18-24 ans Il y a eu 15 réponses pour l'âge 55 ans et plus Il y a eu 23 réponses pour l'âge 45-55 ans Il y a eu 19 réponses pour l'âge 25-34 ans Il y a eu 11 réponses pour l'âge 35-44 ans
In [45]:
"""
colFilter = ["Quelle est votre tranche d'âge ?",'Montant_Abonnement']
tempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])
tempDf["count"].to_frame()
colFilter = ["Quelle est votre tranche d'âge ?",'Montant_Achat']
tempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])
tempDf["count"].to_frame()
colFilter = ["Quelle est votre tranche d'âge ?","Qui serait votre principale influence à l'utilisation d'un appareil de suivi des performances ?"]
tempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])
tempDf = tempDf[tempDf["count"]>1]
tempDf["count"].to_frame()
colFilter = ["Quelle est votre tranche d'âge ?","Préfèreriez-vous avoir votre propre appareil, ou bien utiliser un appareil présent directement à l'endroit où vous pratiquer votre sport ?"]
tempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])
tempDf["count"].to_frame()
colFilter = ["Quelle est votre tranche d'âge ?","Est-ce que l'achat d'un appareil reconditionné / d'occasion, et donc moins cher, vous intéresserait ?"]
tempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])
tempDf["count"].to_frame()
colFilter = ["Quelle est votre tranche d'âge ?","Complexe_Simple"]
tempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])
tempDf["count"].to_frame()
colFilter = ["Quelle est votre tranche d'âge ?","Achat_Loc"]
tempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])
tempDf["count"].to_frame()
"""
Out[45]:
'\ncolFilter = ["Quelle est votre tranche d\'âge ?",\'Montant_Abonnement\']\ntempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])\ntempDf["count"].to_frame()\n\ncolFilter = ["Quelle est votre tranche d\'âge ?",\'Montant_Achat\']\ntempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])\ntempDf["count"].to_frame()\n\ncolFilter = ["Quelle est votre tranche d\'âge ?","Qui serait votre principale influence à l\'utilisation d\'un appareil de suivi des performances ?"]\ntempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])\ntempDf = tempDf[tempDf["count"]>1]\ntempDf["count"].to_frame()\n\ncolFilter = ["Quelle est votre tranche d\'âge ?","Préfèreriez-vous avoir votre propre appareil, ou bien utiliser un appareil présent directement à l\'endroit où vous pratiquer votre sport ?"]\ntempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])\ntempDf["count"].to_frame()\n\ncolFilter = ["Quelle est votre tranche d\'âge ?","Est-ce que l\'achat d\'un appareil reconditionné / d\'occasion, et donc moins cher, vous intéresserait ?"]\ntempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])\ntempDf["count"].to_frame()\n\ncolFilter = ["Quelle est votre tranche d\'âge ?","Complexe_Simple"]\ntempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])\ntempDf["count"].to_frame()\n\ncolFilter = ["Quelle est votre tranche d\'âge ?","Achat_Loc"]\ntempDf=result.groupby(colFilter).count().sort_values(by=colFilter,ascending=[True,True])\ntempDf["count"].to_frame()\n'
Analyse par genre¶
In [46]:
genres = {}
for i in range (len(result)):
tempGenre = result["Quel est votre genre ?"].iloc[i]
if(tempGenre not in genres):
genres[tempGenre] = 1
else:
genres[tempGenre]+=1
genreDict ={}
for curgenres in genres.keys():
genreDict[curgenres] = result[result["Quel est votre genre ?"]==curgenres]
genreDict[curgenres].dropna(axis=1,inplace=True,how='all')
renameCol(genreDict[curgenres])
genreDict[curgenres].sort_index(axis=1, ascending=False,inplace=True)
print(f"Il y a eu {len(genreDict[curgenres])} réponses pour le genre {curgenres}")
genreDict = dict(sorted(genreDict.items()))
delList=[]
minNb = 10
for k in genreDict.keys():
if(len(genreDict[k])<=minNb):delList.append(k)
print("Suppression des données de moins de",minNb)
for i in delList:
print("Suppression de :",i)
del genreDict[i]
#Graph
for stat in statNames:
for k in genreDict.keys():
genreDict[k].groupby(by=stat).count().sort_values(by='count',ascending=False).plot(kind='pie',y='count',figsize=(5,5),title=f"{stat} pour un(e) {k} -> {len(genreDict[k])} réponses",autopct='%1.1f%%',legend=False)
Il y a eu 66 réponses pour le genre Homme Il y a eu 60 réponses pour le genre Femme Il y a eu 3 réponses pour le genre Je ne souhaite pas le préciser Suppression des données de moins de 10 Suppression de : Je ne souhaite pas le préciser
Analyse par lieu¶
In [47]:
lieux = {}
for i in range (len(result)):
tempLieu = result["Quelle est votre principale région de résidence ?"].iloc[i]
if(tempLieu not in lieux):
lieux[tempLieu] = 1
else:
lieux[tempLieu]+=1
lieuDict ={}
for curLieu in lieux.keys():
lieuDict[curLieu] = result[result["Quelle est votre principale région de résidence ?"]==curLieu]
lieuDict[curLieu].dropna(axis=1,inplace=True,how='all')
renameCol(lieuDict[curLieu])
lieuDict[curLieu].sort_index(axis=1, ascending=False,inplace=True)
print(f"Il y a eu {len(lieuDict[curLieu])} réponses pour le lieu {curLieu}")
lieuDict = dict(sorted(lieuDict.items()))
delList=[]
minNb = 6
for k in lieuDict.keys():
if(len(lieuDict[k])<=minNb):delList.append(k)
print("Suppression des données de moins de",minNb)
for i in delList:
#print("Suppression de :",i)
del lieuDict[i]
#Graph
for stat in statNames:
for k in lieuDict.keys():
lieuDict[k].groupby(by=stat).count().plot(kind='pie',y='count',figsize=(5,5),title=f"{stat} pour un(e) {k} -> {len(lieuDict[k])} réponses",autopct='%1.1f%%',legend=False)
Il y a eu 67 réponses pour le lieu Île-de-France Il y a eu 1 réponses pour le lieu Normandie Il y a eu 1 réponses pour le lieu Uae Il y a eu 3 réponses pour le lieu Suisse Il y a eu 7 réponses pour le lieu Auvergne Rhône-Alpes Il y a eu 9 réponses pour le lieu Liban Il y a eu 9 réponses pour le lieu Occitanie Il y a eu 5 réponses pour le lieu Bretagne Il y a eu 5 réponses pour le lieu Provence-Alpes Côte d'Azur Il y a eu 4 réponses pour le lieu Hauts-de-France Il y a eu 8 réponses pour le lieu Bourgogne Franche-Comté Il y a eu 1 réponses pour le lieu Other country Il y a eu 2 réponses pour le lieu Kuwait Il y a eu 3 réponses pour le lieu Nouvelle-Aquitaine Il y a eu 1 réponses pour le lieu Pays de la Loire Il y a eu 1 réponses pour le lieu Centre-Val de Loire Il y a eu 1 réponses pour le lieu Paris Il y a eu 1 réponses pour le lieu Tunisie Suppression des données de moins de 6
Analyse par catégorie socio-professionnelle ?¶
In [48]:
cats = {}
for i in range (len(result)):
tempCat = result["Quelle est votre catégorie socio-professionnelle ?"].iloc[i]
if(tempCat not in cats):
cats[tempCat] = 1
else:
cats[tempCat]+=1
catDict ={}
for curCat in cats.keys():
catDict[curCat] = result[result["Quelle est votre catégorie socio-professionnelle ?"]==curCat]
catDict[curCat].dropna(axis=1,inplace=True,how='all')
renameCol(catDict[curCat])
catDict[curCat].sort_index(axis=1, ascending=False,inplace=True)
print(f"Il y a eu {len(catDict[curCat])} réponses pour le lieu {curCat}")
catDict = dict(sorted(catDict.items()))
delList=[]
minNb = 5
for k in catDict.keys():
if(len(catDict[k])<=minNb):delList.append(k)
print("Suppression des données de moins de",minNb)
for i in delList:
#print("Suppression de :",i)
del catDict[i]
#Graph
for stat in statNames:
for k in catDict.keys():
catDict[k].groupby(by=stat).count().plot(kind='pie',y='count',figsize=(5,5),title=f"{stat} pour un(e) {k} -> {len(catDict[k])} réponses",autopct='%1.1f%%',legend=False)
Il y a eu 48 réponses pour le lieu Etudiant Il y a eu 8 réponses pour le lieu Retraité Il y a eu 24 réponses pour le lieu Employé Il y a eu 8 réponses pour le lieu Enseignant Il y a eu 26 réponses pour le lieu Cadre Il y a eu 2 réponses pour le lieu Militaire Il y a eu 2 réponses pour le lieu Parent au foyer Il y a eu 3 réponses pour le lieu Demandeur d'emploi Il y a eu 2 réponses pour le lieu Artisan / Commerçant Il y a eu 1 réponses pour le lieu Saisonnier Il y a eu 2 réponses pour le lieu Profession intérimaire Il y a eu 1 réponses pour le lieu Architecte d'interieur Il y a eu 1 réponses pour le lieu Agriculteur Il y a eu 1 réponses pour le lieu Chef d'entreprise Suppression des données de moins de 5
Analyse par fréquence¶
In [49]:
freq = {}
for i in range (len(result)):
tempCat = result["À quelle fréquence pratiquez-vous une activité sportive ?"].iloc[i]
if(tempCat not in freq):
freq[tempCat] = 1
else:
freq[tempCat]+=1
freqDict ={}
for curFreq in freq.keys():
freqDict[curFreq] = result[result["À quelle fréquence pratiquez-vous une activité sportive ?"]==curFreq]
freqDict[curFreq].dropna(axis=1,inplace=True,how='all')
renameCol(freqDict[curFreq])
freqDict[curFreq].sort_index(axis=1, ascending=False,inplace=True)
print(f"Il y a eu {len(freqDict[curFreq])} réponses pour le lieu {curFreq}")
freqDict = dict(sorted(freqDict.items()))
delList=[]
minNb = 5
for k in freqDict.keys():
if(len(freqDict[k])<=minNb):delList.append(k)
print("Suppression des données de moins de",minNb)
for i in delList:
#print("Suppression de :",i)
del freqDict[i]
#Graph
for stat in statNames:
for k in freqDict.keys():
freqDict[k].groupby(by=stat).count().plot(kind='pie',y='count',figsize=(5,5),title=f"{stat} pour un(e) {k} -> {len(freqDict[k])} réponses",autopct='%1.1f%%',legend=False)
Il y a eu 78 réponses pour le lieu Régulièrement chaque semaine Il y a eu 22 réponses pour le lieu Régulièrement chaque mois Il y a eu 16 réponses pour le lieu Occasionnellement Il y a eu 13 réponses pour le lieu Plutôt rarement Suppression des données de moins de 5
HeatMap¶
In [50]:
def renameColHeat(df):
cols = {}
for i in df.columns:
if('fréquence' in i):
cols[i]='Fréquence'
elif ("influence" in i):
cols[i]='Influence'
elif ("âge" in i):
cols[i]='Age'
elif ("résidence" in i):
cols[i]='Lieu'
elif ("catégorie" in i):
cols[i]='Catégorie'
elif ("sport principal" in i):
cols[i]='Sport Principal'
elif ("secteur" in i):
cols[i]='Secteur'
elif ("genre" in i):
cols[i]='Genre'
elif ("propre appareil" in i):
cols[i]='Possession'
elif ("compétition" in i):
cols[i]='Compétition'
elif ("club sportif" in i):
cols[i]='Club'
elif ("utilisez-vous un appareil" in i):
cols[i]='Utilisation'
elif ("appareil reconditionné" in i):
cols[i]='Reconditionné'
df.rename(columns=cols,inplace=True)
return df
In [51]:
heatMapColDrop = ["count","Si non pour quelles raisons ?","Raisons","Si oui quel(s) appareil(s) utilisez-vous ?","Appareils_Utiles"]
resultHeatMap = result.drop(heatMapColDrop,axis=1)
resultHeatMap = renameColHeat(resultHeatMap)
resultHeatMap['Achat_Loc'] = resultHeatMap['Achat_Loc'].map(nanAchat_Loc)
resultHeatMap
Out[51]:
| Fréquence | Influence | Age | Lieu | Catégorie | Sport Principal | Secteur | Genre | Possession | Compétition | ... | Obstacle_Prix | Obstacle_Mauv_Utilisation | Obstacle_Inutile | Obstacle_Inconfort | Montant_Achat | Montant_Abonnement | Utilisation | Reconditionné | Complexe_Simple | Achat_Loc | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Régulièrement chaque semaine | Mon entraineur m'en a conseillé un | 15-17 ans | Île-de-France | Etudiant | Hockey | Education | Homme | Mon propre appareil | Oui | ... | 5.0 | 3.0 | 2.0 | 2.0 | 0-24 euros | 0-4,99 euros | Non | Peut-être, cela dépend de l'état du produit | Complet mais complexe | Achat |
| 1 | Régulièrement chaque semaine | Mon entraineur m'en a conseillé un | 18-24 ans | Île-de-France | Etudiant | Raquettes | Informatique / Télécom | Homme | Mon propre appareil | Non | ... | 5.0 | 2.0 | 2.0 | 4.0 | 25-49 euros | 0-4,99 euros | Non | Peut-être, cela dépend de l'état du produit | Complet mais complexe | Achat |
| 6 | Régulièrement chaque mois | Des sportifs professionnels que j'apprécie l'u... | 18-24 ans | Île-de-France | Etudiant | Raquettes | Industrie | Homme | Mon propre appareil | Non | ... | 5.0 | 1.0 | 1.0 | 1.0 | 50-99 euros | 0-4,99 euros | Non | Oui, s'il fonctionne c'est le principal | Complet mais complexe | Achat |
| 27 | Régulièrement chaque semaine | Des amis l'utilisent | 18-24 ans | Normandie | Etudiant | Raquettes | Agroalimentaire | Homme | Mon propre appareil | Non | ... | 5.0 | 2.0 | 3.0 | 2.0 | 50-99 euros | 0-4,99 euros | Oui | Oui, s'il fonctionne c'est le principal | Simplifié mais compréhensible | Achat |
| 29 | Occasionnellement | Mon médecin m'en a conseillé un | 18-24 ans | Île-de-France | Etudiant | Raquettes | Communication / Marketing | Femme | Mon propre appareil | Non | ... | 4.0 | 3.0 | 3.0 | 2.0 | 50-99 euros | 0-4,99 euros | Non | Oui, s'il fonctionne c'est le principal | Simplifié mais compréhensible | Achat |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 109 | Régulièrement chaque mois | Des sportifs professionnels que j'apprécie l'u... | 18-24 ans | Île-de-France | Cadre | Golf | Energie | Homme | Mon propre appareil | Non | ... | 2.0 | 3.0 | 2.0 | 2.0 | 50-99 euros | 5-9,99 euros | Non | Oui, s'il fonctionne c'est le principal | Complet mais complexe | Achat |
| 111 | Régulièrement chaque mois | Des sportifs professionnels que j'apprécie l'u... | 35-44 ans | Hauts-de-France | Chef d'entreprise | Golf | Droit | Femme | Un appareil présent sur place | Non | ... | 4.0 | 2.0 | 4.0 | 3.0 | 50-99 euros | 10-14,99euros | Non | Oui, s'il fonctionne c'est le principal | Complet mais complexe | Achat |
| 112 | Occasionnellement | Mon médecin m'en a conseillé un | 25-34 ans | Bretagne | Employé | Equestres | Ressources humaines | Femme | Mon propre appareil | Non | ... | 4.0 | 5.0 | 2.0 | 2.0 | 50-99 euros | 10-14,99euros | Non | Peut-être, cela dépend de l'état du produit | Complet mais complexe | Achat |
| 124 | Régulièrement chaque mois | Des amis l'utilisent | 15-17 ans | Île-de-France | Etudiant | Equestres | Physique / Mécanique | Femme | Mon propre appareil | Non | ... | 4.0 | 3.0 | 4.0 | 3.0 | 25-49 euros | 5-9,99 euros | Non | Oui, s'il fonctionne c'est le principal | Complet mais complexe | Achat |
| 125 | Régulièrement chaque semaine | Des fédérations sportives professionnelles / c... | 15-17 ans | Île-de-France | Etudiant | Equestres | Transport | Homme | Un appareil présent sur place | Oui | ... | 5.0 | 2.0 | 2.0 | 3.0 | 0-24 euros | 5-9,99 euros | Non | Oui, s'il fonctionne c'est le principal | Complet mais complexe | Location |
129 rows × 23 columns
In [52]:
def classToInt(x):
return x
for col in resultHeatMap.columns:
tempDict = {}
count=0
for i in range (len(resultHeatMap)):
cur = resultHeatMap[col].iloc[i]
if cur in tempDict.keys():
resultHeatMap[col].iloc[i] = tempDict[cur]
else:
tempDict[cur] = count
count+=1
resultHeatMap[col].iloc[i] = tempDict[cur]
resultHeatMap
Out[52]:
| Fréquence | Influence | Age | Lieu | Catégorie | Sport Principal | Secteur | Genre | Possession | Compétition | ... | Obstacle_Prix | Obstacle_Mauv_Utilisation | Obstacle_Inutile | Obstacle_Inconfort | Montant_Achat | Montant_Abonnement | Utilisation | Reconditionné | Complexe_Simple | Achat_Loc | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | ... | 0.0 | 1.0 | 0.0 | 1.0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 6 | 1 | 1 | 1 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | ... | 0.0 | 2.0 | 1.0 | 2.0 | 2 | 0 | 0 | 1 | 0 | 0 |
| 27 | 0 | 2 | 1 | 1 | 0 | 1 | 3 | 0 | 0 | 1 | ... | 0.0 | 1.0 | 2.0 | 0.0 | 2 | 0 | 1 | 1 | 1 | 0 |
| 29 | 2 | 3 | 1 | 0 | 0 | 1 | 4 | 1 | 0 | 1 | ... | 1.0 | 0.0 | 2.0 | 0.0 | 2 | 0 | 0 | 1 | 1 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 109 | 1 | 1 | 1 | 0 | 4 | 13 | 6 | 0 | 0 | 1 | ... | 3.0 | 0.0 | 0.0 | 0.0 | 2 | 2 | 0 | 1 | 0 | 0 |
| 111 | 1 | 1 | 5 | 9 | 13 | 13 | 13 | 1 | 1 | 1 | ... | 1.0 | 1.0 | 3.0 | 3.0 | 2 | 3 | 0 | 1 | 0 | 0 |
| 112 | 2 | 3 | 4 | 7 | 2 | 14 | 19 | 1 | 0 | 1 | ... | 1.0 | 4.0 | 0.0 | 0.0 | 2 | 3 | 0 | 0 | 0 | 0 |
| 124 | 1 | 2 | 0 | 0 | 0 | 14 | 9 | 1 | 0 | 1 | ... | 1.0 | 0.0 | 3.0 | 3.0 | 1 | 2 | 0 | 1 | 0 | 0 |
| 125 | 0 | 13 | 0 | 0 | 0 | 14 | 5 | 0 | 1 | 0 | ... | 0.0 | 1.0 | 0.0 | 3.0 | 0 | 2 | 0 | 1 | 0 | 1 |
129 rows × 23 columns
In [53]:
cor=resultHeatMap.corr("pearson") #Correlation of the variables between them
cor
Out[53]:
| Fréquence | Influence | Age | Lieu | Catégorie | Sport Principal | Secteur | Genre | Possession | Compétition | ... | Obstacle_Prix | Obstacle_Mauv_Utilisation | Obstacle_Inutile | Obstacle_Inconfort | Montant_Achat | Montant_Abonnement | Utilisation | Reconditionné | Complexe_Simple | Achat_Loc | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Fréquence | 1.000000 | -0.101220 | 0.177353 | 0.084492 | 0.052230 | 0.099060 | -0.080584 | 0.186121 | 0.188177 | 0.221064 | ... | 0.160367 | 0.018642 | -0.126458 | -0.081198 | -0.075794 | 0.066913 | -0.218548 | 0.003444 | 0.051237 | 0.105908 |
| Influence | -0.101220 | 1.000000 | 0.184054 | 0.121942 | 0.143438 | 0.072427 | -0.046455 | -0.014121 | -0.076634 | 0.002186 | ... | 0.109344 | -0.081297 | 0.022999 | 0.133343 | 0.027543 | -0.024362 | 0.318336 | 0.269985 | -0.076842 | -0.043319 |
| Age | 0.177353 | 0.184054 | 1.000000 | 0.216223 | 0.552841 | 0.245979 | 0.165295 | 0.084058 | 0.115087 | 0.259480 | ... | 0.094853 | 0.099558 | 0.082517 | 0.070576 | 0.204884 | 0.011601 | 0.141833 | 0.089074 | -0.031354 | -0.033551 |
| Lieu | 0.084492 | 0.121942 | 0.216223 | 1.000000 | 0.231103 | 0.174508 | 0.143829 | 0.055972 | -0.020923 | 0.038549 | ... | 0.128162 | -0.026976 | 0.026113 | 0.080605 | 0.059751 | 0.121263 | 0.055037 | 0.045345 | -0.026855 | 0.028638 |
| Catégorie | 0.052230 | 0.143438 | 0.552841 | 0.231103 | 1.000000 | 0.237357 | 0.229350 | 0.054140 | 0.179545 | 0.155691 | ... | 0.097933 | 0.060585 | 0.120353 | 0.085762 | 0.022236 | 0.111009 | -0.036128 | 0.088486 | -0.122479 | 0.045253 |
| Sport Principal | 0.099060 | 0.072427 | 0.245979 | 0.174508 | 0.237357 | 1.000000 | 0.179666 | 0.022005 | 0.204276 | 0.043578 | ... | 0.202928 | -0.085957 | 0.019184 | 0.031861 | -0.052430 | 0.295270 | -0.086180 | 0.051545 | -0.149784 | 0.141929 |
| Secteur | -0.080584 | -0.046455 | 0.165295 | 0.143829 | 0.229350 | 0.179666 | 1.000000 | 0.029989 | 0.085630 | -0.011086 | ... | -0.000028 | 0.009675 | 0.030752 | 0.086446 | 0.232580 | 0.224299 | 0.099395 | 0.051635 | -0.011673 | 0.161096 |
| Genre | 0.186121 | -0.014121 | 0.084058 | 0.055972 | 0.054140 | 0.022005 | 0.029989 | 1.000000 | 0.099562 | 0.188209 | ... | 0.019335 | -0.066433 | 0.023608 | -0.066719 | -0.213364 | -0.005724 | -0.105475 | 0.121089 | 0.246594 | -0.029370 |
| Possession | 0.188177 | -0.076634 | 0.115087 | -0.020923 | 0.179545 | 0.204276 | 0.085630 | 0.099562 | 1.000000 | -0.057741 | ... | -0.021555 | -0.088292 | 0.012010 | 0.094681 | -0.271225 | 0.075341 | -0.259936 | -0.052573 | 0.011096 | 0.343765 |
| Compétition | 0.221064 | 0.002186 | 0.259480 | 0.038549 | 0.155691 | 0.043578 | -0.011086 | 0.188209 | -0.057741 | 1.000000 | ... | 0.015306 | 0.001252 | 0.135811 | -0.059819 | -0.115697 | -0.093092 | -0.209178 | 0.075553 | 0.258325 | -0.089900 |
| Club | 0.417611 | -0.190444 | 0.115833 | 0.061499 | 0.060621 | 0.127737 | 0.019254 | 0.177019 | 0.075330 | 0.326700 | ... | 0.015489 | -0.032365 | -0.075819 | -0.010268 | 0.006684 | -0.011419 | -0.097132 | -0.032342 | 0.067818 | -0.000722 |
| Obstacle_Visuel | -0.083104 | -0.109921 | -0.169994 | -0.033345 | -0.101597 | -0.017619 | 0.052077 | 0.067751 | 0.063463 | -0.103937 | ... | 0.102119 | 0.101610 | 0.099084 | 0.101463 | 0.001656 | 0.131283 | 0.017928 | -0.032803 | 0.134085 | -0.021334 |
| Obstacle_Qualite | -0.040325 | -0.028164 | 0.107628 | 0.003747 | 0.171462 | 0.009984 | 0.048888 | 0.062096 | -0.113743 | 0.161755 | ... | -0.031886 | 0.294914 | 0.166488 | 0.044744 | -0.106050 | -0.022620 | 0.095179 | -0.068635 | 0.111347 | -0.063098 |
| Obstacle_Prix | 0.160367 | 0.109344 | 0.094853 | 0.128162 | 0.097933 | 0.202928 | -0.000028 | 0.019335 | -0.021555 | 0.015306 | ... | 1.000000 | -0.148111 | -0.143269 | -0.145102 | 0.223884 | 0.277768 | 0.149062 | 0.149083 | -0.056940 | 0.046029 |
| Obstacle_Mauv_Utilisation | 0.018642 | -0.081297 | 0.099558 | -0.026976 | 0.060585 | -0.085957 | 0.009675 | -0.066433 | -0.088292 | 0.001252 | ... | -0.148111 | 1.000000 | 0.299003 | 0.191744 | -0.042738 | -0.056276 | -0.110089 | 0.093740 | 0.043968 | -0.049600 |
| Obstacle_Inutile | -0.126458 | 0.022999 | 0.082517 | 0.026113 | 0.120353 | 0.019184 | 0.030752 | 0.023608 | 0.012010 | 0.135811 | ... | -0.143269 | 0.299003 | 1.000000 | 0.221418 | -0.010366 | 0.056437 | -0.154630 | 0.060930 | 0.062471 | 0.040043 |
| Obstacle_Inconfort | -0.081198 | 0.133343 | 0.070576 | 0.080605 | 0.085762 | 0.031861 | 0.086446 | -0.066719 | 0.094681 | -0.059819 | ... | -0.145102 | 0.191744 | 0.221418 | 1.000000 | -0.021136 | -0.080819 | -0.003675 | -0.008969 | -0.096725 | 0.084076 |
| Montant_Achat | -0.075794 | 0.027543 | 0.204884 | 0.059751 | 0.022236 | -0.052430 | 0.232580 | -0.213364 | -0.271225 | -0.115697 | ... | 0.223884 | -0.042738 | -0.010366 | -0.021136 | 1.000000 | 0.261978 | 0.416346 | 0.022950 | -0.221303 | -0.074110 |
| Montant_Abonnement | 0.066913 | -0.024362 | 0.011601 | 0.121263 | 0.111009 | 0.295270 | 0.224299 | -0.005724 | 0.075341 | -0.093092 | ... | 0.277768 | -0.056276 | 0.056437 | -0.080819 | 0.261978 | 1.000000 | 0.141215 | -0.016668 | -0.181645 | 0.273706 |
| Utilisation | -0.218548 | 0.318336 | 0.141833 | 0.055037 | -0.036128 | -0.086180 | 0.099395 | -0.105475 | -0.259936 | -0.209178 | ... | 0.149062 | -0.110089 | -0.154630 | -0.003675 | 0.416346 | 0.141215 | 1.000000 | -0.113480 | -0.060444 | -0.231964 |
| Reconditionné | 0.003444 | 0.269985 | 0.089074 | 0.045345 | 0.088486 | 0.051545 | 0.051635 | 0.121089 | -0.052573 | 0.075553 | ... | 0.149083 | 0.093740 | 0.060930 | -0.008969 | 0.022950 | -0.016668 | -0.113480 | 1.000000 | 0.051695 | 0.089603 |
| Complexe_Simple | 0.051237 | -0.076842 | -0.031354 | -0.026855 | -0.122479 | -0.149784 | -0.011673 | 0.246594 | 0.011096 | 0.258325 | ... | -0.056940 | 0.043968 | 0.062471 | -0.096725 | -0.221303 | -0.181645 | -0.060444 | 0.051695 | 1.000000 | -0.092838 |
| Achat_Loc | 0.105908 | -0.043319 | -0.033551 | 0.028638 | 0.045253 | 0.141929 | 0.161096 | -0.029370 | 0.343765 | -0.089900 | ... | 0.046029 | -0.049600 | 0.040043 | 0.084076 | -0.074110 | 0.273706 | -0.231964 | 0.089603 | -0.092838 | 1.000000 |
23 rows × 23 columns
In [54]:
c = resultHeatMap.corr("pearson").abs()
s = c.unstack()
so = s.sort_values(kind="quicksort")
so = so[so!=1]
so.tail(16)
Out[54]:
Montant_Abonnement Sport Principal 0.295270 Sport Principal Montant_Abonnement 0.295270 Obstacle_Mauv_Utilisation Obstacle_Inutile 0.299003 Obstacle_Inutile Obstacle_Mauv_Utilisation 0.299003 Influence Utilisation 0.318336 Utilisation Influence 0.318336 Club Compétition 0.326700 Compétition Club 0.326700 Achat_Loc Possession 0.343765 Possession Achat_Loc 0.343765 Montant_Achat Utilisation 0.416346 Utilisation Montant_Achat 0.416346 Fréquence Club 0.417611 Club Fréquence 0.417611 Catégorie Age 0.552841 Age Catégorie 0.552841 dtype: float64
In [55]:
import numpy as np
from pandas import DataFrame
import seaborn as sns
%matplotlib inline
fig, ax = plt.subplots(figsize=(20,15))
sns.heatmap(cor, annot=True,ax=ax,cmap='Blues')
Out[55]:
<AxesSubplot:>